/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:张熳
 * Date:2025-08-29
 * Time:4:27
 */
//内部类

class Out {
    public void test() {
        System.out.println("haha");
    }
}
public class Test {
    public static void main(String[] args) {
        //匿名内部类
        OutClass4 outClass4 = new OutClass4();
        outClass4.InnerClass4();
        outClass4.InnerClass5();
    }
    public static void main7(String[] args) {
        //匿名内部类
        new Out(){

        }.test();
    }
    public static void main6(String[] args) {
        //局部内部类
        OutClass3 outClass3 = new OutClass3();
        outClass3.TestMethod();
    }
    public static void main5(String[] args) {
        //实例化外部类
        OutClass2 outClass2 = new OutClass2();
        //通过外部类的对象的引用来创建实例内部类对象
        OutClass2.InnerClass2 innerClass2 = outClass2.new InnerClass2();
        //成员访问，然后通过引用访问
        innerClass2.test();
        innerClass2.date4 = 44;
        //内部类中静态成员变量通过类名来访问，需要创建实例化对象
        OutClass2.InnerClass2.date6 = 66;
    }
    public static void main4(String[] args) {
        //如何实例化一个实例内部类
        //InnerClass2 innerClass2 = new InnerClass2();
    }
    public static void main3(String[] args) {
        //静态内部类对象创建
        OutClass.InnerClass innerClass = new OutClass.InnerClass();
        //成员访问，先实例化对象，然后通过引用访问
        innerClass.test();
        innerClass.date4 = 40;
        //内部类中静态成员变量通过类名去访问，不需要创建实例化对象
        OutClass.InnerClass.date6 = 60;
    }
    public static void main2(String[] args) {
        //非静态的成员变量 / 方法，先创建类的实例化，然后通过对象的引用去访问
        OutClass outClass = new OutClass();
        outClass.date1 = 10;
        outClass.testA();
        //static修饰的静态成员变量 / 方法，则就直接通过类名访问即可，不需要去实例化
        OutClass.date3 = 30;
        OutClass.testB();
    }
    public static void main1(String[] args) {
        //如何实例化一个静态内部类
        //InnerClass innerClass = new InnerClass();
    }
}
